<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>对高阶函数的思考</title>
</head>
<body>
<script>
    //高阶函数的第一种形式 函数作为方法参数 略

    //高阶函数的第二种形式 函数作为返回值
    /*
    * 函数作为返回值不仅仅体现在返回一个可以使用的函数  就像演示闭包那样简简单单的去操作外侧函数中的变量
    * 函数的特殊性就在于有参数很返回值所以我们在拿到闭包回传的函数，在调用这个函数的时候还可以传递参数，这里的传递参数不仅可以传递数据也可以传递函数
    * 传递函数的意义就是可以活动闭包内部执行的返回值(如果闭包内部使用了setTimeout登异步操作或者没有返回值的高阶函数的话，函数执行的返回值只能通过这种
    * 方式进行传递
    * */

    /*
    * 如果将闭包的这两种方式结合起来就类似于装饰器那种
    * 外部函数接收一个函数作为函数参数类似于接收一个普通数据那种，所不同的是接收函数可以调用
    * */

    function foo(a){
        let num = a
        return function (b){
            return a+b
        }
    }



    // let func = foo(1)
    // console.log(func((2)))


</script>
</body>
</html>